package top.lixunda.ecommerce.server.user.api.entity.dto;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import top.lixunda.common.validate.annotation.XumDefault;
import top.lixunda.common.validate.annotation.XumIncludes;
import top.lixunda.common.validate.annotation.XumMin;
import top.lixunda.common.validate.annotation.XumNotNull;
import top.lixunda.ecommerce.server.business.api.entity.BusinessConstants;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 开启任务DTO
 *
 * @author lixunda
 * @version time:2020/4/14 13:41
 */
@ApiModel("开启任务DTO")
@Data
@EqualsAndHashCode(callSuper = false)
public class BusinessTaskStartDTO {

    /**
     * 任务名称，唯一区分一个任务，如订单发货
     */
    @XumNotNull(message = "任务名称不能为空")
    @ApiModelProperty("任务名称，唯一区分一个任务，如订单发货")
    private String taskName;

    /**
     * 菜单编码，菜单地址，点击代办事项跳转页面
     */
    @XumNotNull(message = "菜单编码不能为空")
    @ApiModelProperty("菜单编码，菜单地址，点击代办事项跳转页面")
    private String menuCode;

    /**
     * 业务主键，如订单发货业务为订单编号
     */
    @XumNotNull(message = "业务主键不能为空")
    @ApiModelProperty("业务主键，如订单发货业务为订单编号")
    private Integer businessId;

    /**
     * 分配模式，快速分配和全部分配
     */
    @XumDefault(BusinessConstants.ALLOT_TYPE_QUICK)
    @XumIncludes(value = {BusinessConstants.ALLOT_TYPE_QUICK, BusinessConstants.ALLOT_TYPE_ALL})
    @ApiModelProperty("分配模式，快速分配和全部分配")
    private String allotType;

    /**
     * 分配模式参数，根据此参数判断分配给某些人
     * 快速分配时，参数为人员编号和人员类型，格式为：10000-ADMIN
     * 全部分配时，参数为人员类型，参数长度为一
     */
    @ApiModelProperty("分配模式参数,根据此参数判断分配给某些人")
    private List<String> allotTypeParam;

    /**
     * 消费模式，单一抢占完成和全部完成，默认为单一抢占完成
     */
    @XumDefault(BusinessConstants.TASK_CONSUME_MODE_SINGLE)
    @XumIncludes({BusinessConstants.TASK_CONSUME_MODE_SINGLE, BusinessConstants.TASK_CONSUME_MODE_ALL})
    @ApiModelProperty("消费模式，单一抢占完成和全部完成，默认为单一抢占完成")
    private String consumeMode;

    /**
     * 是否催办，默认不催办
     */
    @ApiModelProperty("是否催办，默认不催办")
    private Integer urgeFlag;

    /**
     * 催办时间模式，时长和固定时间
     */
    @XumIncludes({BusinessConstants.TASK_URGE_TIME_MODE_LENGTH, BusinessConstants.TASK_URGE_TIME_MODE_TIME})
    @ApiModelProperty("催办时间模式，时长和固定时间")
    private String urgeTimeMode;

    /**
     * 固定时间模式，在此时间之后进行催办
     */
    @ApiModelProperty("urge_time")
    private LocalDateTime urgeTime;

    /**
     * 时长时间模式，在创建任务时长后进行催办，单位秒
     */
    @XumMin(value = 1, message = "时长不能小于1")
    @ApiModelProperty("urge_time_length")
    private Long urgeTimeLength;

    /**
     * 任务描述
     */
    @ApiModelProperty("description")
    private String description;

    /**
     * 是否短信推送任务
     */
    @ApiModelProperty("是否短信推送任务")
    private Integer pushPhoneFlag;

    /**
     * 是否邮件推送任务
     */
    @ApiModelProperty("是否邮件推送任务")
    private Integer pushEmailFlag;

    /**
     * 是否站内推送任务
     */
    @ApiModelProperty("是否站内推送任务")
    private Integer pushWebFlag;

    /**
     * 推送信息标题
     */
    @ApiModelProperty("推送信息标题")
    private String pushTitle;

    /**
     * 推送信息内容
     */
    @ApiModelProperty("推送信息内容")
    private String pushContent;

    /**
     * 推送信息链接地址
     */
    @ApiModelProperty("推送信息链接地址")
    private String pushUrl;

    /**
     * 扩展属性1
     */
    @ApiModelProperty("扩展属性1")
    private Long appLong1;

    /**
     * 扩展属性2
     */
    @ApiModelProperty("扩展属性2")
    private Long appLong2;

    /**
     * 扩展属性3
     */
    @ApiModelProperty("扩展属性3")
    private Long appLong3;

    /**
     * 字符串扩展属性1
     */
    @ApiModelProperty("字符串扩展属性1")
    private String appString1;

    /**
     * 字符串扩展属性2
     */
    @ApiModelProperty("字符串扩展属性2")
    private String appString2;

    /**
     * 字符串扩展属性3
     */
    @ApiModelProperty("字符串扩展属性3")
    private String appString3;

    /**
     * 字符串扩展属性4
     */
    @ApiModelProperty("字符串扩展属性4")
    private String appString4;

    /**
     * 字符串扩展属性5
     */
    @ApiModelProperty("字符串扩展属性5")
    private String appString5;

}
